home *** CD-ROM | disk | FTP | other *** search
- int
- do_msgrcv(arglast)
- int *arglast;
- {
- #ifdef HAS_MSG
- register STR **st = stack->ary_array;
- register int sp = arglast[0];
- STR *mstr;
- char *mbuf;
- long mtype;
- int id, msize, flags, ret;
-
- id = (int)str_gnum(st[++sp]);
- mstr = st[++sp];
- msize = (int)str_gnum(st[++sp]);
- mtype = (long)str_gnum(st[++sp]);
- flags = (int)str_gnum(st[++sp]);
- mbuf = str_get(mstr);
- if (mstr->str_cur < sizeof(long)+msize+1) {
- STR_GROW(mstr, sizeof(long)+msize+1);
- mbuf = str_get(mstr);
- }
- errno = 0;
- ret = msgrcv(id, (struct msgbuf *)mbuf, msize, mtype, flags);
- if (ret >= 0) {
- mstr->str_cur = sizeof(long)+ret;
- mstr->str_ptr[sizeof(long)+ret] = '\0';
- }
- return ret;
- #else
- fatal("msgrcv not implemented");
- #endif
- }
-
-